// B3928 田忌赛马
// 题目描述：
// 你要和田忌赛马。你们各自有 N 匹马，并且要进行 N 轮比赛，每轮比赛，你们都要各派出一匹马决出胜负。
// 你的马匹的速度分别为 u1, u2, ..., un，田忌的马匹的速度分别为 v1, v2, ..., vn。
// 田忌会按顺序派出他的马匹，请问你要如何排兵布阵，才能赢得最多轮次的比赛？
// 巧合的是，你和田忌的所有马匹的速度两两不同，因此不可能出现平局。
//
// 输入格式：
// 第一行一个整数 N (1 ≤ N ≤ 5×10^4)。
// 第二行 N 个用空格隔开的整数，依次为 u1, u2, ..., un，表示你的马匹们的速度。1 ≤ ui ≤ 2N。
// 第三行 N 个用空格隔开的整数，依次为 v1, v2, ..., vn，表示田忌的马匹们的速度。1 ≤ vi ≤ 2N。
//
// 输出格式：
// 输出一行，表示你最多能获胜几轮。
//
// 输入输出样例：
// 输入#1：
// 3
// 1 3 5
// 2 4 6
// 输出#1：
// 2
// 输入#2：
// 5
// 10 3 5 8 7
// 4 6 1 2 9
// 输出#2：
// 5
//
// 样例解释 1：
// 第 1 轮，田忌派出速度为 2 的马匹，你可以派出速度为 3 的马匹迎战，本轮你获胜。
// 第 2 轮，田忌派出速度为 4 的马匹，你可以派出速度为 5 的马匹迎战，本轮你获胜。
// 第 3 轮，田忌派出速度为 6 的马匹，你可以派出速度为 1 的马匹迎战，本轮田忌获胜。
// 如此，你可以赢得 2 轮比赛。
//
// 说明/提示：
// 你和田忌的所有马匹速度两两不同，不会出现平局。
//
// 请在下方编写你的代码
// --- 田忌赛马 贪心解法 ---
#include <bits/stdc++.h>
using namespace std;

int main() {
    int n;
    cin >> n;
    vector<int> u(n), v(n);
    for (int i = 0; i < n; ++i) cin >> u[i]; // 读入你的马
    for (int i = 0; i < n; ++i) cin >> v[i]; // 读入田忌的马
    sort(u.begin(), u.end()); // 你的马按速度升序
    sort(v.begin(), v.end()); // 田忌的马按速度升序
    int ans = 0, j = 0;
    // 用你的最小能赢田忌的马去赢田忌
    for (int i = 0; i < n; ++i) {
        if (u[i] > v[j]) {
            ++ans;
            ++j;
        }
    }
    cout << ans << endl;
    return 0;
}
/*
详细注释：
1. 读入n和两组马的速度，分别存到u和v数组。
2. 对两组马的速度排序。
3. 用u数组的马依次和v数组的马比，如果u[i]能赢v[j]，就计一次胜利，并让v的指针后移。
4. 最后输出胜利次数。
核心思想：贪心——用能赢的最小马去赢田忌的最小马。
*/